//引用express框架
const express = require('express');
//引用route路由
const pushTask = express.Router();
//引用数据库操作逻辑
var Step = require('../model/step')
var Task = require('../model/task')
var Task_stepBind = require('../model/task_stepBind')
var TaskPush = require('../model/taskPush')
// 获取当前时间
var date = new Date()

pushTask.post('/', (req, res) => {
    // 返回前端信息
    let data = {
        status: 200,
        tip: 'success',
    }

    // 任务存储信息
    let taskInfor = {
        taskName: '',       //任务名称
        taskDetail: '',     //任务简介
        iphone: '',         //任务紧急联系
        password: null,           //密码设置
        taskReturn: 0,           //任务赏金
        memberSum: -1,            //任务人数
        startTime: '',      //起始时间
        endTime: '',        //结束时间
        city: '',      //任务发布地点定位
        taskCreatTime: date.getTime()   //任务创始时间
    }
    // 步骤存储信息
    let stepInfor = {
        StepName: '',   //步骤名称
        StepDetail: '', //步骤描述
        addressName: '',    //地点名称
        longitude: '',      //地点经纬度
        latitude: ''
    }
    // 存储步骤和任务关联信息
    let bind = {
        taskId: '',
        stepId: '',
        index: 0
    }
    // 存储任务和用户关联信息
    let pushInfor = {
        openId: '',     //任务发布者关联ID
        taskId: '',     //任务关联ID
        pushTime: date.getTime()    //开始任务时间
    }
    let respon = res
    // 1.存储任务
    // 获取任务信息
    taskInfor.taskName = req.body.taskName
    taskInfor.taskDetail = req.body.taskDetail
    taskInfor.iphone = req.body.iphone
    if (req.body.password.valid)
        taskInfor.password = req.body.password.value
    if (req.body.money.valid)
        taskInfor.taskReturn = req.body.money.value
    if (req.body.memberSum.valid)
        taskInfor.memberSum = req.body.memberSum.value
    taskInfor.startTime = req.body.startTime
    taskInfor.endTime = req.body.endTime
    taskInfor.city = req.body.city
    // 建立任务存储对象
    let task = new Task(taskInfor)
    task.save((err, doc) => {
        // 存储失败处理
        if (err) {
            data.status = '600'
            respon.status(200).json(data)
            return
        }
        // 存储成功，保存任务id
        bind.taskId = doc._id
        // 2.存储步骤
        // 遍历步骤信息
        req.body.step.forEach(i => {
            // 获取步骤信息
            stepInfor.StepName = i.name
            stepInfor.StepDetail = i.detail
            stepInfor.addressName = i.address
            stepInfor.longitude = i.jing
            stepInfor.latitude = i.wei
            //建立步骤存储对象
            let step = new Step(stepInfor)
            step.save((err, doc) => {
                // 存储失败处理
                if (err) {
                    data.status = '600'
                    respon.status(200).json(data)
                    return
                }
                // 存储成功，保存任务id
                bind.stepId = doc._id;
                bind.index++;
                //建立任务与步骤联系存储对象
                let task_stepBind = new Task_stepBind(bind)
                task_stepBind.save((err, doc) => {
                    // 存储失败处理
                    if (err) {
                        data.status = '600'
                        respon.status(200).json(data)
                        return
                    }
                })
            })
        })
        // 3.存储用户与任务关联
        // 获取openId
        pushInfor.openId = req.body.token
        // 获取任务Id
        pushInfor.taskId = bind.taskId
        // 获取当前时间
        let time = new Date()
        pushInfor.pushTime = time.getTime();
        let taskPush = new TaskPush(pushInfor)
        taskPush.save((err, doc) => {
            // 存储失败处理
            if (err) {
                data.status = '600'
                respon.status(200).json(data)
                return
            }
            respon.status(200).json(data)
        })
    })
})


//将路由对象做为模块成员进行导出
module.exports = pushTask;